## 13.7. Other Languages

There are many other popular (and not-so-popular) languages available for Linux. For the most part, however, these work identically on Linux as on other Unix systems, so there's not much in the way of news there. There are also so many of them that we can't cover them in much detail here. We do want to let you know what's out there, however, and explain some of the differences between the various languages and compilers.

Python has gained a lot of attention lately, because it is a powerful mixture of different programming paradigms and styles. For example, it is one of the very few interpreted object-oriented programming languages (Perl being another example, but only relatively late in its existence). Python fans say it is especially easily learned. Python was almost entirely written and designed by Guido van Rossum, who chose the name because he wrote the interpreter while watching reruns of the British TV show Monty Python's Flying Circus. You can read all about Python at http://www.python.org or in Programming Python by Mark Lutz.

LISP is an interpreted language used in many applications, ranging from artificial intelligence to statistics. It is used primarily in computer science, because it defines a clean, logical interface for working with algorithms. (It also uses a lot of parentheses, something computer scientists are always fond of.) It is a functional programming language and is very generalized. Many operations are defined in terms of recursion instead of linear loops. Expressions are hierarchical, and data is represented by lists of items.

There are several LISP interpreters available for Linux. Emacs LISP is a fairly complete implementation in itself. It has many features that allow it to interact directly with Emacs--input and output through Emacs buffers, for example--but it may be used for non-Emacs-related applications as well.

Also available is CLISP, a Common LISP implementation by Bruno Haible of Karlsruhe University and Michael Stoll of Munich University. It includes an interpreter, a compiler, and a subset of CLOS (Common LISP Object System, an object-oriented extension to LISP). CLX, a Common LISP interface to the X Window System, is also available, and it runs under CLISP. CLX allows you to write X-based applications in LISP. Austin Kyoto Common LISP, another LISP implementation, is available and compatible with CLX as well.

SWI-Prolog, a complete Prolog implementation by Jan Wielemaker of the University of Amsterdam, is also available. Prolog is a logic-based language, allowing you to make logical assertions, define heuristics for validating those assertions, and make decisions based on them. It is a useful language for AI applications.

Also available are several Scheme interpreters, including MIT Scheme, a complete Scheme interpreter conforming to the R4 standard. Scheme is a dialect of LISP that offers a cleaner, more general programming model. It is a good LISP dialect for computer-science applications and for studying algorithms.

At least two implementations of Ada are available--AdaEd, an Ada interpreter, and GNAT, the GNU Ada Translator. GNAT is actually a full-fledged optimizing Ada compiler. It is to Ada what `gcc` is to C and C++.

Along the same vein, two other popular language translators exist for Linux--`p2c`, a Pascal-to-C translator, and `f2c`, a FORTRAN-to-C translator. If you're concerned that these translators won't function as well as bona fide compilers, don't be. Both `p2c` and `f2c` have proven to be robust and useful for heavy Pascal and FORTRAN use.

`f2c` is FORTRAN-77-compliant, and a number of tools are available for it as well. `ftnchek` is a FORTRAN checker, similar to `lint`. Both the LAPACK numerical methods library and the mpfun multiprecision FORTRAN library have been ported to Linux using `f2c`. `toolpack` is a collection of FORTRAN tools, such as a source-code pretty-printer, a precision converter, and a portability checker.

Among the miscellaneous other languages available for Linux are interpreters for APL, Rexx, Forth, ML, Eiffel, and a Simula-to-C translator. The GNU versions of the compiler tools `lex` and `yacc` (renamed to `flex` and `bison`, respectively), which are used for many software packages, have also been ported to Linux. `lex` and `yacc` are invaluable for creating any kind of parser or translator, most commonly used when writing compilers.

Copyright © 2001 O'Reilly & Associates. All rights reserved.